#ifndef HEAD_H
#define HEAD_H

#include<my_header.h>
#include"hashmap.h"
#pragma pack(1)
typedef enum {
	CMD_TYPE_INIT = -1,
	CMD_TYPE_CD = 1,
	CMD_TYPE_LS,
	CMD_TYPE_PWD,
	CMD_TYPE_MKDIR,
	CMD_TYPE_RMDIR,
	CMD_TYPE_REMOVE,

	CMD_TYPE_PUTS,
    CMD_TYPE_SYNC_PUTS,
	CMD_TYPE_GETS,
    CMD_TYPE_SYNC_GET,
	CMD_TYPE_TRANSFER_END, // 添加文件传输结束标记
	CMD_TYPE_NOTCMD,

	LOGIN = 100,
    REGISTER_USERNAME,
    REGISTER_PASSWORD
}CmdType;

//客户端协议
typedef struct protocol_client_s {
	
	CmdType _cmdType; //命令类型
	int _length; //参数大小
	int _num; //参数个数
	int _flag; //是否携带参数
    char _data[1024]; //参数内容
} protocol_client;

//服务端响应协议
typedef struct protocol_server_s {
	int _status; //-1,异常，0正常
	int _num; //参数个数
	int _flag;
	int _length;
    char _data[1024];
} protocol_server;

//客户端状态
typedef struct client_state_s
{
	int _isLogin;//是否登录成功
	int _netfd;
	int _userId;
	char _username[100];
	HashMap *_map;//读取配置文件
	char _keepPath[1024]; //用来记录所在路径
	int _path_len;
	char _token[1024];
	int _token_len;
} client_state_t;



//文件
typedef struct PutsData {
	char path[1000];
	char token[1024];
	char fileName[1024];
	char ip[100];
	char port[100];
	int flag; // 0: 上传文件, 1:下载文件
} PutsData;




#endif